package mystruct

import "fmt"

//该结构体扩展了tree.go文件中TreeNode结构体
type MyTreeNode struct {
	Node *TreeNode
}

//定义一个独有的方法
func (myNode *MyTreeNode) PostOrder() {
	if myNode == nil || myNode.Node == nil {
		return
	}
	left := MyTreeNode{myNode.Node.Left}
	left.PostOrder()
	right := MyTreeNode{myNode.Node.Right}
	right.PostOrder()
	myNode.Node.Print()
}

//内嵌方式扩展tree.go文件中的TreeNode结构体
type MyTreeNode2 struct {
	*TreeNode
}

func (myNode2 *MyTreeNode2) PostOrder() {
	if myNode2 == nil || myNode2.TreeNode == nil {
		return
	}
	//MyTreeNode2内嵌扩展了TreeNode所以myNode2可以直接使用TreeNode中的成员
	left := MyTreeNode{myNode2.Left}
	left.PostOrder()
	right := MyTreeNode{myNode2.Right}
	right.PostOrder()
	myNode2.Print() //因为内嵌了TreeNode，所以方法也可以直接使用
}

func (myNode2 *MyTreeNode2) Traversing() {
	fmt.Println("MyTreeNode2的方法")
}
